package com.zkk.qqclient.service;

import com.zkk.qqcommon.Message;
import com.zkk.qqcommon.MessageType;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;

public class ClientConnectServerThread extends Thread{
    //该线程需要持有Socket
    private Socket socket;

    //构造器初始化Socket
    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    //为了方便得到Socket
    public Socket getSocket() {
        return socket;
    }

    @Override
    public void run() {
        //因为Thread需要在后台和服务器通信。因此我们while循环
        while (true){

            try {
                System.out.println("客户端线程，等待读取从服务器发送的消息");
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                Message message = (Message) ois.readObject();//如果服务器没有发送Message对象，线程会阻塞于此
                //判断message类型 然后做相应的业务处理
                if (message.getMesType().equals(MessageType.MESSAGE_RET__ONLINE_FRIEND)){//如果读取到服务器返回在线用户列表信息

                    //取出在线列表信息 并显示
                    String[] onlineUsers = message.getContent().split(" ");
                    System.out.println("\n===========当前在线用户列表如下===========");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("用户： " + onlineUsers[i]);
                    }
                }else if(message.getMesType().equals(MessageType.MESSAGE_COMM_MES)){
                    //把从服务器接受的消息 显示到控制台
                    System.out.println("\n" + message.getSender() + "对" + message.getGetter() + "说" + message.getContent());
                }else if(message.getMesType().equals(MessageType.MESSAGE_TO_ALL)){
                    //显示群发消息 到控制台
                    System.out.println("\n" + message.getSender() + "对你说：" + message.getContent());
                }else if(message.getMesType().equals(MessageType.MESSAGE_FILE)){
                    //如果是文件消息
                    System.out.println("\n" + message.getSender() + "给" + message.getGetter() + "发文件：" + message.getSrc() + "到我的电脑目录：" + message.getDest());

                    //读取message对象中的文件字节数组 通过文件输出流输出到对应磁盘的目录下
                    byte[] fileBytes = message.getFileBytes();
                    FileOutputStream fileOutputStream = new FileOutputStream(message.getDest());
                    fileOutputStream.write(fileBytes);
                    fileOutputStream.close();
                    System.out.println("\n" + "保持文件成功");
                }else {
                    System.out.println("other");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
